home *** CD-ROM | disk | FTP | other *** search
/ PC Media 20 / PC MEDIA CD20.iso / share / prog / a_debug1 / debug1.txt < prev    next >
Text File  |  1995-03-05  |  5KB  |  158 lines

  1. En el VCL viene una referencia a un articulo sobre
  2. antidebug, si no es el mismo te agradecería que, si lo
  3. consigues, lo pongas por aquí.
  4.  
  5. Como veo que buscais técnicas anti-debugger, yo tengo algunos, he aquí un
  6. resumen de algunas técnicas y metodos para evitarlas. :-))
  7.  
  8. ===8<==========================================
  9. 1. Preventive actions:
  10. ----------------------
  11. 1.1. Interrupt disable:
  12.    1.1.1. Hardware masking of interrupt:
  13.  
  14.        Deshabiltar la IRQ1 del teclado (port 21:=port 21 or 2)
  15.  
  16. POR QUÉ NO:  inútil contra Soft-ICE.
  17.  
  18.    1.1.2. Software masking of interrupt:
  19.  
  20.        Poner vectores de interrupción que no usas a cero (ej,
  21.        int 3 y demás).
  22.  
  23.    1.1.3. Vector manipulation
  24.  
  25.        Usar los vectores int 01 e int 03 para datos del programa (ej,
  26.        para una rutina de desencriptación).
  27.  
  28.    1.1.4. Interrupt replacement
  29.  
  30.        Copiar vectores de interrupción que usas (ej, int 16 ó int 21) a
  31.        los vectores int 01 e int 03 y usar éstos en lugar de aquellos.
  32.  
  33.        (además el que int 03 sea un código de un sólo byte, "cc", hace
  34.        que sea difícil sustituirlo por la int xx original, de dos bytes
  35.        "cd xx").
  36.  
  37. POR QUÉ NO:  A los depuradores V86 no les afecta.
  38.  
  39. 1.2. Time watch:
  40.  
  41.        Poner un bucle que espera a que cambie el contador de tiempo del
  42.        DOS, "util contra programas como el TD que deshabilitan todas las
  43.        interrupciones salvo cuando se está ejecutando el programa"
  44.        "Sirve contra RUN, no TRACE".   (mi no comprender :-?  :-?)
  45.  
  46. POR QUÉ NO: Cuando se "cuelga" en el bucle, interrumpes, ves lo que pasa,
  47.             y machacas el bucle con NOPs.
  48.  
  49. 1.3. Fool the debugger:
  50.  
  51.        Saltar dentro del código de una instrucción que a su vez contiene
  52.        la instrucción que quieres ejecutar:
  53.  
  54.        104:  eb 02           jmp 108
  55.        106:  c6 06 e6 21 00  mov byte ptr [21e6],90
  56.      ( 108:        e6 21 90  out 21, al / nop )
  57.  
  58. POR QUÉ NO: le dices que te desensamble a partir de cs:ip.
  59.  
  60. 1.4. Check CPU Flags:
  61.  
  62.        "Bueno contra depuradores en modo real."
  63.        Pones la TF (bit ocho de flags) a 0 en un punto del programa y
  64.        luego la compruebas en otro punto. Si está a 1 estás bajo un
  65.        depurador.
  66.  
  67. POR QUÉ NO: inútil en V86
  68.  
  69. 1.5. Cause debugger to stop execution:
  70.  
  71.        Espolvorear int 3 en el código, sobre todo dentro de bucles.
  72.  
  73. POR QUÉ NO: Es fácil pisar la int 03 con un NOP. A muchos depuradores
  74.             se les puede indicar que no paren ante una int 03.
  75.  
  76. 1.6. Halt computer using stack:
  77.  
  78.        Apuntar ss:sp a un trozo de código que no utiliza la pila.
  79.        Si se depurando, el depurador que no utilice su propia pila
  80.        machacará el código.
  81.  
  82. POR QUÉ NO: Los depuradores sí utilizan su propia pila.
  83.  
  84. 1.7. Halt TD386 V8086 mode:
  85.  
  86.        TD386 no usa int 0 para la división por cero. TD386 detecta un
  87.        fallo de división y aborta el programa, mientras que sin TD386
  88.        basta con apuntar la int 0 a la instrucción siguiente a la
  89.        división por cero para recuperar el control.
  90.  
  91. POR QUÉ NO: No es verdad. Eso no le hace nada al TD386.
  92.  
  93. 1.8. Halt any V8086 process:
  94.  
  95.        Apuntar el vector int 0d al código y causar una excepción de
  96.        protección. El programa funcionará en modo real, pero no en
  97.        V8086.
  98.  
  99. POR QUÉ NO: Es muy fácil cambiar el código ilegal y además te cargas la
  100.             compatibilidad con muchos sistemas.
  101.  
  102. 2. Self-modifying code:
  103. -----------------------
  104.  
  105. 2.1. Encryptive/decryptive algorithm:
  106.  
  107.        Desencriptas un código antes de ejecutarlo. Si el depurador ha
  108.        metido un byte int 03 al desencriptarlo se cambiará por basura.
  109.  
  110.            100     mov bx, 0971
  111.            103     mov di, 0110
  112.            106     xchg ax,cx
  113.            107     xchg ax,cx
  114.            108     xor byte ptr [cs:di],97
  115.            10c     inc di
  116.            10d     dec bx
  117.            10e     jnz 106
  118.            110 07  pop es    ; cambiará a 90 NOP
  119.            111     pop es
  120.  
  121.  
  122. 2.2. Self-modifying code:
  123.    2.2.1. Simple self-modification:
  124.  
  125.        Modificar el código que vas a ejecutar para borrar los int 03 que
  126.        ponga el depurador:
  127.  
  128.           100         call 0107   ; queremos saltarnos esta subrutina
  129.           103 cd 20   int 20      ; aquí el depurador pone int 3
  130.           105         int 21
  131.           107         mov [word ptr 103],4cb4 ; "mov ah,4c"
  132.           10d         ret
  133.  
  134. POR QUÉ NO: Depuradores V86 te dejan usar breakpoints hardware, sin
  135.             utilizar int 03. (Tanto para 2.1 como para 2.2.1)
  136.  
  137.  
  138.    2.2.2. The Running Line (self-decrypting):
  139.  
  140.        < Este lo puse antes :-) >
  141.  
  142.  
  143. Créditos:
  144.  
  145. ANTIDEPURADOR:
  146.                             Anti Debugging Tricks
  147.                                      By:
  148.                                   Inbar Raz
  149.                  Assistance by Eden Shochat and Yossi Gottlieb
  150.                                Release number 5
  151.  
  152.                                    - - - -
  153. ANTIANTIDEPURADOR ("POR QUÉ NO"):
  154.  
  155.         Sun 24 Jan 93
  156.         By: Michael Forrest
  157.         Hi.  Here's release 1 of the Anti-Anti Debugging Tricks article.
  158.